home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / beans / DefaultPersistenceDelegate.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.1 KB  |  188 lines

  1. package java.beans;
  2.  
  3. import java.awt.Component;
  4. import java.awt.event.ComponentListener;
  5. import java.lang.reflect.Array;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8. import java.util.EventListener;
  9. import javax.swing.JMenuItem;
  10. import javax.swing.event.ChangeListener;
  11. import sun.reflect.misc.MethodUtil;
  12.  
  13. public class DefaultPersistenceDelegate extends PersistenceDelegate {
  14.    private String[] constructor;
  15.    private Boolean definesEquals;
  16.  
  17.    public DefaultPersistenceDelegate() {
  18.       this(new String[0]);
  19.    }
  20.  
  21.    public DefaultPersistenceDelegate(String[] var1) {
  22.       this.constructor = var1;
  23.    }
  24.  
  25.    private static boolean definesEquals(Class var0) {
  26.       try {
  27.          return var0 == var0.getMethod("equals", Object.class).getDeclaringClass();
  28.       } catch (NoSuchMethodException var2) {
  29.          return false;
  30.       }
  31.    }
  32.  
  33.    private boolean definesEquals(Object var1) {
  34.       if (this.definesEquals != null) {
  35.          return this.definesEquals == Boolean.TRUE;
  36.       } else {
  37.          boolean var2 = definesEquals(var1.getClass());
  38.          this.definesEquals = var2 ? Boolean.TRUE : Boolean.FALSE;
  39.          return var2;
  40.       }
  41.    }
  42.  
  43.    protected boolean mutatesTo(Object var1, Object var2) {
  44.       return this.constructor.length != 0 && this.definesEquals(var1) ? var1.equals(var2) : super.mutatesTo(var1, var2);
  45.    }
  46.  
  47.    protected Expression instantiate(Object var1, Encoder var2) {
  48.       int var3 = this.constructor.length;
  49.       Class var4 = var1.getClass();
  50.       Object[] var5 = new Object[var3];
  51.  
  52.       for(int var6 = 0; var6 < var3; ++var6) {
  53.          String var7 = this.constructor[var6];
  54.  
  55.          try {
  56.             var5[var6] = MethodUtil.invoke(ReflectionUtils.getPublicMethod(var4, "get" + NameGenerator.capitalize(var7), new Class[0]), var1, new Object[0]);
  57.          } catch (Exception var9) {
  58.             var2.getExceptionListener().exceptionThrown(var9);
  59.          }
  60.       }
  61.  
  62.       return new Expression(var1, var1.getClass(), "new", var5);
  63.    }
  64.  
  65.    private boolean isTransient(Class var1, PropertyDescriptor var2) {
  66.       if (var1 == null) {
  67.          return false;
  68.       } else {
  69.          String var3 = var2.getName();
  70.          BeanInfo var4 = MetaData.getBeanInfo(var1);
  71.          PropertyDescriptor[] var5 = var4.getPropertyDescriptors();
  72.  
  73.          for(int var6 = 0; var6 < var5.length; ++var6) {
  74.             PropertyDescriptor var7 = var5[var6];
  75.             if (var3.equals(var7.getName())) {
  76.                Object var8 = var7.getValue("transient");
  77.                if (var8 != null) {
  78.                   return Boolean.TRUE.equals(var8);
  79.                }
  80.             }
  81.          }
  82.  
  83.          return this.isTransient(var1.getSuperclass(), var2);
  84.       }
  85.    }
  86.  
  87.    private static boolean equals(Object var0, Object var1) {
  88.       return var0 == null ? var1 == null : var0.equals(var1);
  89.    }
  90.  
  91.    private void doProperty(Class var1, PropertyDescriptor var2, Object var3, Object var4, Encoder var5) throws Exception {
  92.       Method var6 = var2.getReadMethod();
  93.       Method var7 = var2.getWriteMethod();
  94.       if (var6 != null && var7 != null && !this.isTransient(var1, var2)) {
  95.          Expression var8 = new Expression(var3, var6.getName(), new Object[0]);
  96.          Expression var9 = new Expression(var4, var6.getName(), new Object[0]);
  97.          Object var10 = var8.getValue();
  98.          Object var11 = var9.getValue();
  99.          var5.writeExpression(var8);
  100.          if (!equals(var11, var5.get(var10))) {
  101.             Object[] var12 = var2.getValue("enumerationValues");
  102.             if (var12 instanceof Object[] && Array.getLength(var12) % 3 == 0) {
  103.                Object[] var13 = var12;
  104.  
  105.                for(int var14 = 0; var14 < var13.length; var14 += 3) {
  106.                   try {
  107.                      Field var15 = var1.getField((String)var13[var14]);
  108.                      if (var15.get((Object)null).equals(var10)) {
  109.                         var5.remove(var10);
  110.                         var5.writeExpression(new Expression(var10, var15, "get", new Object[]{null}));
  111.                      }
  112.                   } catch (Exception var16) {
  113.                   }
  114.                }
  115.             }
  116.  
  117.             invokeStatement(var3, var7.getName(), new Object[]{var10}, var5);
  118.          }
  119.       }
  120.  
  121.    }
  122.  
  123.    static void invokeStatement(Object var0, String var1, Object[] var2, Encoder var3) {
  124.       var3.writeStatement(new Statement(var0, var1, var2));
  125.    }
  126.  
  127.    private void initBean(Class var1, Object var2, Object var3, Encoder var4) {
  128.       BeanInfo var5 = MetaData.getBeanInfo(var1);
  129.       PropertyDescriptor[] var6 = var5.getPropertyDescriptors();
  130.  
  131.       for(int var7 = 0; var7 < var6.length; ++var7) {
  132.          try {
  133.             this.doProperty(var1, var6[var7], var2, var3, var4);
  134.          } catch (Exception var18) {
  135.             var4.getExceptionListener().exceptionThrown(var18);
  136.          }
  137.       }
  138.  
  139.       if (Component.class.isAssignableFrom(var1)) {
  140.          EventSetDescriptor[] var19 = var5.getEventSetDescriptors();
  141.  
  142.          for(int var8 = 0; var8 < var19.length; ++var8) {
  143.             EventSetDescriptor var9 = var19[var8];
  144.             Class var10 = var9.getListenerType();
  145.             if (var10 != ComponentListener.class && (var10 != ChangeListener.class || var1 != JMenuItem.class)) {
  146.                EventListener[] var11 = new EventListener[0];
  147.                EventListener[] var12 = new EventListener[0];
  148.  
  149.                try {
  150.                   Method var13 = var9.getGetListenerMethod();
  151.                   var11 = (EventListener[])MethodUtil.invoke(var13, var2, new Object[0]);
  152.                   var12 = (EventListener[])MethodUtil.invoke(var13, var3, new Object[0]);
  153.                } catch (Throwable var17) {
  154.                   try {
  155.                      Method var14 = var1.getMethod("getListeners", Class.class);
  156.                      var11 = (EventListener[])MethodUtil.invoke(var14, var2, new Object[]{var10});
  157.                      var12 = (EventListener[])MethodUtil.invoke(var14, var3, new Object[]{var10});
  158.                   } catch (Exception var16) {
  159.                      return;
  160.                   }
  161.                }
  162.  
  163.                String var22 = var9.getAddListenerMethod().getName();
  164.  
  165.                for(int var23 = var12.length; var23 < var11.length; ++var23) {
  166.                   invokeStatement(var2, var22, new Object[]{var11[var23]}, var4);
  167.                }
  168.  
  169.                String var24 = var9.getRemoveListenerMethod().getName();
  170.  
  171.                for(int var15 = var11.length; var15 < var12.length; ++var15) {
  172.                   invokeStatement(var2, var24, new Object[]{var11[var15]}, var4);
  173.                }
  174.             }
  175.          }
  176.  
  177.       }
  178.    }
  179.  
  180.    protected void initialize(Class<?> var1, Object var2, Object var3, Encoder var4) {
  181.       super.initialize(var1, var2, var3, var4);
  182.       if (var2.getClass() == var1) {
  183.          this.initBean(var1, var2, var3, var4);
  184.       }
  185.  
  186.    }
  187. }
  188.